# 指定子目录（移除当前目录 `.`，仅包含真正的子目录）
SUBDIRS := Cpuload

# 收集当前目录和子目录的 .c 文件（避免重复）
SRCS1 := $(wildcard *.c) $(foreach dir,$(SUBDIRS),$(wildcard $(dir)/*.c))

# 生成对应的 .o 文件路径（保留子目录结构）
OBJS1 := $(patsubst %.c,%.o,$(SRCS1))

# 指定编译器路径
AS = D:/MinGW64/bin/as.exe
CC = D:/MinGW64/bin/gcc.exe

# 编译选项（添加头文件路径，注意目录名大小写）
CFLAGS = -Wall -g -I. -I$(SUBDIRS)  # 假设头文件在子目录中，如 Cpuload/xxx.h

# 检测操作系统并设置删除命令
ifeq ($(OS),Windows_NT)
    RM = rm
    # 定义清理所有 .o 文件的模式（当前目录和子目录）
    ALL_OBJS := $(OBJS1) $(wildcard $(SUBDIRS)/*.o)
else #ifeq ($(shell uname), Linux)
    RM = rm -f
    ALL_OBJS := $(OBJS1) $(wildcard $(SUBDIRS)/*.o)
endif

# 伪目标
.PHONY : all clean build run

# 默认目标
all: build

# 构建目标
build: $(OBJS1)
	$(CC) $(OBJS1) -o main.exe

# 编译规则
%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

# 清理目标（包含当前目录和子目录的 .o 文件）
clean:
	$(RM) $(ALL_OBJS) main.exe debug.log *.hex

# 执行目标（依赖构建）
run:
	./main.exe > debug.log
